package com.atguigu.wulaoshi

object $03_HighFunction {
  def main(args: Array[String]): Unit = {
    def f(n: Int): Int = {
      println("f调用")
      n + 1
    }

    //1.函数作为值传递
    val ff = f _

    //2.函数作为参数进行传递
      //定义二元计算函数:定义传入的数据是什么:数据不写死
    def dualEval(op: (Int, Int) => Int, a: Int, b: Int): Unit = {
      op(a, b)
    }
     //定义函数,留待作为二元计算函数的参数
    def add(a:Int,b:Int):Int={
      a+b
    }
      //调用
    dualEval(add,12,35)
    dualEval((a:Int,b:Int)=>a+b,12,35)
    dualEval(_+_,12,35)

    //3.函数做为函数的返回值返回
    def f5():Int=>Unit = {
      def f6(a:Int):Unit={
        println("f6调用"+a)
      }
      f6 //将函数直接返回,并没有调用f6
    }
    //外界调用
    f5()//返回f6这个函数
    f5()(6)//调用了f6
  }


}
